package com.atguigu.gulimall.coupon;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;


/**
 * 1、如何使用Nacos作为配置中心统一管理配置
 *  1）、引入依赖
 *       <dependency>
 *             <groupId>com.alibaba.cloud</groupId>
 *             <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
 *         </dependency>
 *
 *  2）、创建一个bootstrap.yml （ Springboot加载配置时，bootstarp.yml优先级大于application.yml。）
 *      spring:
 *          application:
 *              name: gulimall-coupon
 *          cloud:
 *              nacos:
 *                  config:
 *                      server-addr: 127.0.0.1:8848 #配置中心地址
 *
 *  3）、在配置了nacos配置中心后，默认情况下，微服务在启动时会自动从nacos上加载一个配置：
 *          会从: 默认命名空间的DEFAULT_GROUP分组下，加载一个名为：当前服务名.properties/yml 这么一个配置文件。
 *      所以可以给配置中心添加这么一个配置文件：
 *          配置集（Data Id） 规则：服务名.properties/yml
 *          （默认的命名空间、分组，都可以更改，bootstarp.yml里指定的是什么，就加载什么）
 *
 *  4）、在 服务名.properties/yml 添加任何配置。
 *
 *  5）、 代码中，动态获取nacos的配置
 *          @RefreshScope
 *          @Value("${xxx.xxx.xxx}")
 *          见：com.atguigu.gulimall.coupon.controller.CouponController
 *
 *  注意：如果 配置中心 和 当前yml中都有相同配置，则优先使用 配置中心。
 *
 * 2、细节
 *
 *  1）、命名空间（多个命名空间，可以达到隔离配置的效果）
 *      默认：public（保留空间），默认情况下新添加的所有配置集都在public空间中。
 *      1、利用命名空间名来做环境隔离。（如：一个微服务取一个命名空间）
 *          注意：在bootstarp配置文件中，选中命名空间。（默认是public）
 *              spring.cloud.nacos.config.namespace: a7b43895-a150-4e83-b404-247f945793f8 #选中当前服务使用的命名空间
 *      2、可以为每一个微服务设置一个命名空间，达到基于微服务配置隔离
 *
 *  2）、配置集
 *
 *  3）、配置集ID：类似文件名
 *          Data ID：服务名.properties
 *
 *  4）、配置分组
 *          默认所有的配置都属于：DEFAULT_GROUP
 *
 *  每个微服务创建自己的命名空间，并配置不同分组，区分不同的开发环境（如：dev/test/prop）
 *
 *
 * 3、同时加载多个配置集（处理默认加载的配置外，还可以加载任意个配置文件）
 *  1)、微服务任何配置信息、配置文件都可以放在配置中心中
 *  2)、只需要在bootstrap中说明加配置中心的具体配置集 即可。
 *      见：bootstarp.yml
 *
 *
 *
 */
@EnableDiscoveryClient //开启注册与发现功能
@SpringBootApplication
public class GulimallCouponApplication {

    public static void main(String[] args) {
        SpringApplication.run(GulimallCouponApplication.class, args);
    }

}
